package com.juli.school.service.impl;

import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.juli.school.dao.entity.News;
import com.juli.school.dao.entity.Pub;
import com.juli.school.dao.mapper.NewsMapper;
import com.juli.school.service.CommonService;
import com.juli.school.service.bo.NewsBo;
import com.juli.school.service.enums.EnumModule;
import com.juli.school.service.utils.BeanUtils;
import com.juli.school.utils.core.model.CommonResp;
import com.juli.school.utils.core.model.ListResp;
import com.juli.school.utils.core.model.PageResp;
import com.juli.school.utils.log.annotation.DigestLog;

/**
 * @author Eve
 * @Description: 新闻业务处理
 * @date 2017/8/31.
 */
@Service
public class NewsService implements CommonService<NewsBo> {
	
	private static final Logger logger = LoggerFactory.getLogger(NewsService.class);
	
	@Resource
	NewsMapper newsMapper;
	
	@Resource
	PubService pubService;
	
	/**
	 * @Description: 新增新闻中心信息
	 * @author gaoxiang
	 * @date 2017年11月17日 下午2:51:40
	 */
	@DigestLog
	@Transactional
	public CommonResp<String> add(NewsBo newsBo) {
		CommonResp<String> commonResp = new CommonResp<String>();
		try {
			newsBo.setType(EnumModule.News.code);
			// 先保存总的 发布信息表
			Pub pub = pubService.add(newsBo);
			BeanUtils.copyProperties(newsBo, pub);
			// 再保存详细新闻中心信息
			newsMapper.insert(newsBo);
			commonResp.setData(newsBo.getSnStamp());
			commonResp.success();
		} catch (Exception e) {
			logger.error("新增新闻中心信息异常", e);
			commonResp.exception("新增新闻中心信息异常" + e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 删除新闻中心信息
	 * @author gaoxiang
	 * @date 2017年11月19日 下午3:40:06
	 */
	@DigestLog
	@Transactional
	public CommonResp<String> delete(String snStamp, String stuId) {
		CommonResp<String> commonResp = new CommonResp<String>();
		try {
			pubService.deleteBySnStamp(snStamp, stuId);
			newsMapper.deleteBySnStamp(snStamp);
			commonResp.success();
		} catch (Exception e) {
			logger.error("删除新闻中心信息异常", e);
			commonResp.exception("删除新闻中心信息异常" + e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 更新新闻中心发布信息
	 * @author gaoxiang
	 * @date 2017年11月19日 下午3:41:33
	 */
	@DigestLog
	@Transactional
	public CommonResp<String> update(NewsBo newsBo) {
		CommonResp<String> commonResp = new CommonResp<String>();
		try {
			newsBo.setType(EnumModule.News.code);
			// 先更新总的 发布信息表
			Pub pub = pubService.update(newsBo);
			BeanUtils.copyProperties(newsBo, pub);
			// 再更新详细新闻中心信息
			newsMapper.update(newsBo);
			commonResp.success();
			commonResp.setData(newsBo.getSnStamp());
		} catch (Exception e) {
			logger.error("更新新闻中心信息异常", e);
			commonResp.exception("更新新闻中心信息异常 " + e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 获取新闻中心详情
	 * @author gaoxiang
	 * @date 2017年11月19日 下午3:43:22
	 */
	@DigestLog
	public CommonResp<NewsBo> detail(Pub req) {
		CommonResp<NewsBo> commonResp = new CommonResp<NewsBo>();
		try {
			req.setType(EnumModule.News.code);
			NewsBo newsBo = new NewsBo();
			// 先查询发布信息总表
			Pub detail = pubService.detail(req);
			BeanUtils.copyProperties(newsBo, detail);
			// 如果有多余的字段，请查询详情表
			News news = newsMapper.getBySnStamp(detail.getSnStamp());
			newsBo.setNewkind(news.getNewkind());
			newsBo.setAuthor(news.getAuthor());
			newsBo.setLoginNo(news.getLoginNo());
			newsBo.setIpAddr(news.getIpAddr());
			commonResp.setData(newsBo);
			commonResp.success();
		} catch (Exception e) {
			logger.error("获取发布信息详情发生异常", e);
			commonResp.exception("获取发布信息详情发生异常" + e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 分页查询失物信息
	 * @author gaoxiang
	 * @date 2017年8月25日 下午11:36:40
	 */
	public CommonResp<PageResp<Pub>> listPage(NewsBo req) {
		return pubService.listPage(req);
	}

	public CommonResp<ListResp<Pub>> list(NewsBo req) {
		return pubService.list(req);
	}
}
